/**
 * Copyright (c) 2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import Ability from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

import HiLog from '../utils/HiLog';
import MmsPreferences from '../utils/MmsPreferences';
import WorkFactory, { WorkerType } from '../workers/WorkFactory';
import simCardService from '../service/SimCardService';

const TAG = 'app';

export default class MainAbility extends Ability {
  onCreate(want, launchParam): void {
    HiLog.i(TAG, 'Ability onCreate com.ohos.mms version: 1.0.0.41');
    globalThis.mmsContext = this.context;
    globalThis.abilityWant = want;
    globalThis.needToUpdate = true;
    MmsPreferences.getInstance().initPreferences();
    globalThis.DataWorker = WorkFactory.getWorker(WorkerType.DataWorker);
  }

  onNewWant(want, launchParam): void {
    HiLog.i(TAG, 'Application onNewWant');
    globalThis.abilityWant = want;
  }

  onWindowStageCreate(windowStage: Window.WindowStage): void {
    // Main window is created, set main page for this ability
    windowStage.loadContent('pages/index', (err, data) => {
      if (err.code) {
        HiLog.e(TAG, 'testTag', 'Failed to load the content.');
        return;
      }
      HiLog.i(TAG, 'testTag', 'Succeeded in loading the content. Data: %{public}s');
    });
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    HiLog.i(TAG, 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    HiLog.i(TAG, 'Ability onForeground');
    simCardService.init();
  }

  onBackground(): void {
    // Ability has back to background
    HiLog.i(TAG, 'Ability onBackground');
    simCardService.deInit();
  }

  onDestroy(): void {
    HiLog.i(TAG, 'Ability onDestroy');
    if (globalThis.DataWorker == null || globalThis.DataWorker == undefined) {
      return;
    }
    globalThis.DataWorker.close();
  }
}
